package com.gjl.wechat.service;

import com.gjl.wechat.service.dto.applet.*;
import org.springframework.web.client.RestTemplate;

/**
 * 微信小程序接口
 *
 * @author songlude
 */
public interface WechatAppletService {

    /**
     * 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程
     * 转换unionid
     *
     * @param jsCode     登录时获取的 code，可通过wx.login获取
     * @param appletInfo 小程序信息
     * @return 小程序登录后信息
     */
    JsCode2SessionRes jscode2session(String jsCode, AppletDTO appletInfo);


    /**
     * 获取小程序accessToken
     *
     * @param appletInfo 小程序信息
     * @return 小程序accessToken
     */
    String getAppletAccessToken(AppletDTO appletInfo);


    /**
     * 获取小程序accessToken
     *
     * @param appletInfo 小程序信息
     * @param refresh    是否刷新
     * @return 小程序accessToken
     */
    String getAppletAccessToken(AppletDTO appletInfo, boolean refresh);


    /**
     * 获取小程序 稳定 accessToken
     *
     * @param appletInfo 小程序信息
     * @param refresh    是否刷新
     * @return 小程序accessToken
     */
    String getstableAppletAccessToken(AppletDTO appletInfo, boolean refresh);


    /**
     * 小程序内容检测
     *
     * @param req        检测内容
     * @param appletInfo 小程序信息
     * @return 检测结果
     */
    AppletMsgSecCheckRes msgSecCheck(AppletMsgSecCheckReq req, AppletDTO appletInfo);



    /**
     * 该接口用于获取小程序 scheme 码，适用于短信、邮件、外部网页、微信内等拉起小程序的业务场景
     * <p>1. 每个 URL Scheme 或 URL Link 有效期最长 30 天，均不再支持永久有效的链接、不再区分短期有效链接与长期有效链接；</p>
     * <p>2. 链接生成后，若在微信外打开，用户可以在浏览器页面点击进入小程序。每个独立的链接被用户访问后，仅此用户可以再次访问并打开对应小程序，
     * 其他用户无法再次通过相同链接打开该小程序；</p>
     * <p>3. 单个小程序每天生成链接数（URL Scheme 和 URL Link 总数）上限为 50 万条。</p>
     *
     * @param req        小程序地址参数
     * @param appletInfo 小程序信息
     * @return urlScheme
     */
    AppletSchemeRes generatescheme(AppletSchemeReq req, AppletDTO appletInfo);


    /**
     * 获取小程序收取手机号
     *
     * @param code       手机号获取凭证
     * @param appletInfo 小程序信息
     */
    AppletPhoneNumberRes getuserphonenumber(String code, AppletDTO appletInfo);


    /**
     * 小程序发送消息
     */

    void sendAppMessage(AppMsg msg, AppletDTO appletDTO, RestTemplate restTemplate);

    /**
     * 获取不限制的小程序码
     */
    byte[] getwxacodeunlimit(AppletDTO appletDTO, String scene, String page);
}
